
/*
1.boolean类型还可以这样用
2.返回String，用字符串的追加+
 */

public class Password {
    public static String passwordCheck(String password){//静态函数在主程序中调用的时候不用创建对象
        int len=password.length();
        String str="";//是passwordCheck的返回值
        boolean lenOk=false;
        boolean hasUpper=false;
        boolean hasLower=false;
        boolean hasDigit=false;
        boolean hasSpace=false;

        //判断长度是否在8~15之间
        if(len>=8&&len<=15){
            lenOk=true;
        }

        for (int i = 0; i < len; i++) {
            char c=password.charAt(i);
            //判断是否有大写字母
            if(c>='A'&&c<='Z'){
                hasUpper=true;
            }
            //判断是否有小写字母
            if(c>='a'&&c<='z'){
                hasLower=true;
            }
            //判断是否有数字
            if(c>='0'&&c<='9'){
                hasDigit=true;
            }
            //判断是否有空格
            if(c==' '){
                hasSpace=true;
            }
        }

        if(lenOk&&hasUpper&&hasLower&&hasDigit&&!hasSpace){//长度合理，有大写字母，有小写字母，有数字，没有空格
            return str;
        }else{
            int num=0;
            if(!lenOk){
                str=str+num+"."+"密码长度不在8到15之间！"+"\n";
                num++;
            }
            if(!hasUpper){
                str=str+num+"."+"密码没有包含大写字母！"+"\n";
                num++;
            }
            if(!hasLower){
                str=str+num+"."+"密码没有包含小写字母！"+"\n";
                num++;
            }
            if(!hasDigit){
                str=str+num+"."+"密码没有包含数字！"+"\n";
                num++;
            }
            if(hasSpace){
                str=str+num+"."+"密码含有空格！"+"\n";
                num++;
            }
        }
        return str;
    }
}

/*   public static String passwordCheck(){
    len=password.length();
        if(len>=8&&len<=15){
            lenOk=true;
        }
    }
1.passwordCheck 方法被声明为 static，这意味着它属于类而不是实例。然而，它尝试访问实例变量 password、len 和 lenOk，导致编译错误。静态方法无法直接访问类的非静态成员
2.如果 password 未被初始化（例如通过构造函数），调用 password.length() 会抛出 NullPointerException。
*/
/*
public class Password {
    public static String passwordCheck(){
        private String password;
        private int len;
        boolean lenOk=false;
    }
}
1.成员变量必须在类体中声明，不能在方法内部声明 private是类成员的访问修饰符，不能用于方法内的局部变量
2.String password; // ❌ 局部变量未初始化
  password.length(); // 使用时会导致NullPointerException
局部变量必须显式初始化后才能使用
 */